/*
 * Copyright 2011 Clean GWT
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package com.cleangwt.uibinder.rebind;

import com.cleangwt.uibinder.client.RequiresActionRebind;
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
import com.google.gwt.user.rebind.SourceWriter;

/**
 * A writer for generating implementation methods of {@link RequiresActionRebind}.
 * 
 * @author Jess
 * @version 1.0
 * @since 1.0
 */
public class ActionReindWriter {

  private final JClassType binderType;
  private final EventHandlerWriter handlerWriter;

  public ActionReindWriter(TreeLogger logger, TypeOracle oracle, JClassType binderType) {
    this.binderType = binderType;
    this.handlerWriter = new EventHandlerWriter(logger, oracle);
  }

  /**
   * Generates implementation methods.
   * 
   * @param sw the source writer
   * @param className the output class name
   * @throws UnableToCompleteException
   */
  public void run(SourceWriter sw, String className) throws UnableToCompleteException {
    sw.println("public void addEventHandlers(){");
    sw.indent();
    handlerWriter.run(sw, className, binderType, binderType, null);
    sw.outdent();
    sw.println("}");
  }

}
